package far;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Serializable;
import java.sql.Date;
import java.util.List;
import java.util.Map;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import com.lowagie.text.DocumentException;
import com.lowagie.text.Font;
import com.lowagie.text.Image;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfWriter;
import com.lowagie.text.Document;
import commans.ChangeCode;
import entity.FirePolicyEntity;

import main.CreatePolicyMain;

//屋主甲式底圖續保無新保單號
public class FirePolicyWTypeAuto extends CreatePolicyMain 
{
    private List<FirePolicyEntity> Obj;
    private String name = new String();
    private String Unit_Old;
    private String Unit_new;
    private Image jpeg = null;

    public FirePolicyWTypeAuto(List<FirePolicyEntity> policys)
    {
        setVisible(true);
        this.Obj = policys;
        addWindowListener(new WindowAdapter()
        {
	  public void windowClosing(WindowEvent e)
	  {
	      Map liveThreads = Thread.getAllStackTraces();
	      for(java.util.Iterator i = liveThreads.keySet().iterator(); i.hasNext();)
	      {
		Thread key = (Thread)i.next();
		if(key.getName().equals("CreatePolicy"))
		{
		    key.stop();
		    System.out.println("Thread "+key.getName());
		    document.close();
		    deleteFile(path);
		}
	      }
	  }
        });
    }

    public void CreatePolicy()
    {
        int num1 = 0;
        int num2 = 0;
        int num3 = 0;
        commit = 0;
        try
        {
	  // Count Total File
	  for(FirePolicyEntity ply : this.Obj)
	  {
	      count = count+1;
	  }
	  totalBytes = count;
	  jpeg = Image.getInstance(getClass().getResource("/W.jpg"));
	  jpeg.setAlignment(Image.UNDERLYING);
	  jpeg.scaleAbsolute(590,840);
	  jpeg.setAbsolutePosition(0,0);
	  // font
	  BaseFont bfChinese = BaseFont.createFont("C:\\windows\\fonts\\MINGLIU.TTC,1",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
	  Font FontChinese = new Font(bfChinese,10,Font.NORMAL);
	  Font FontChinese1 = new Font(bfChinese,7,Font.NORMAL);
	  Font FontChinese2 = new Font(bfChinese,8,Font.NORMAL);
	  // initialize open document
	  document.open();
	  for(FirePolicyEntity ply : this.Obj)
	  {

	      Unit_new = ply.getUnitName();
	      if(Unit_new.equals(Unit_Old))
	      {
		document.add(jpeg);
		commit = commit+1;
		// write pdf
		document.add(new Paragraph(16,"                                                                                                "+ply.getNEWPLY(),FontChinese));
		// 要保人
		document.add(new Paragraph(15,"                            "+ply.getFASRCNAME()+"                                                                                         "+ply.getAREANO()+ply.getADDR().substring(0,15),FontChinese2));
		document.add(new Paragraph(0,"                                                                                                       "+CatZero(ply.getFBIRTH().substring(0,3))+"       "+CatZero(ply.getFBIRTH().substring(3,5))+"        "+CatZero(ply.getFBIRTH().substring(5,7)),FontChinese));
		document.add(new Paragraph(7,"                                                                                                                                                                                "+ply.getADDR().substring(15),FontChinese2));
		document.add(new Paragraph(12,"                                                     "+ply.getFASRIDNO()+"                   "+ply.getTEL(),FontChinese));
		if(ply.getFSEX().equals("1"))
		{
		    document.add(new Paragraph(0,"V",FontChinese));
		}
		else if(ply.getFSEX().equals("2"))
		{
		    document.add(new Paragraph(0,"           V",FontChinese));
		}
		// 被保人
		document.add(new Paragraph(13,"                            "+ply.getINSDNAME()+"                                                                                          "+ply.getAREANO()+ply.getADDR().substring(0,15),FontChinese2));
		document.add(new Paragraph(0,"                                                                                                       "+CatZero(ply.getBIRTH().substring(0,3))+"       "+CatZero(ply.getBIRTH().substring(3,5))+"        "+CatZero(ply.getBIRTH().substring(5,7)),FontChinese));
		document.add(new Paragraph(7,"                                                                                                                                                                                "+ply.getADDR().substring(15),FontChinese2));
		document.add(new Paragraph(12,"                                                     "+ply.getIDNO()+"                   "+ply.getTEL(),FontChinese));
		if(ply.getSEX().equals("1"))
		{
		    document.add(new Paragraph(0,"V",FontChinese));
		}
		else if(ply.getSEX().equals("2"))
		{
		    document.add(new Paragraph(0,"           V",FontChinese));
		}
		// 保險期間
		num2 = 2+Integer.parseInt(ply.getEXPDAY().substring(0,3));
		num3 = 1+Integer.parseInt(ply.getEXPDAY().substring(0,3));
		document.add(new Paragraph(14,"                           12                             "+num3+"       "+ply.getEXPDAY().substring(3,5)+"         "+ply.getEXPDAY().substring(5)+"                                              "+num2+"       "+ply.getEXPDAY().substring(3,5)+"          "+ply.getEXPDAY().substring(5),FontChinese));
		// 標的物地址
		document.add(new Paragraph(28,"                        "+ply.getLOCATION().trim()+"     "+ply.getAREA(),FontChinese));
		// 建築
		// document.add(new Paragraph(" "));
		// System.out.println(row[17]);
		for(int i = 0; i<=13; i++)
		{
		    str3[i] = "  ";
		}
		try
		{
		    num1 = Integer.parseInt(ply.getCONSTCLASS());
		}
		catch (NumberFormatException e2)
		{
		    num1 = 0;
		}
		if(num1==1)
		    str4 = "A1";
		else if(num1==2)
		    str4 = "A2";
		else if(num1==3)
		    str4 = "B";
		else if(num1==4)
		    str4 = "C";
		document.add(new Paragraph("                             "+str3[0]+"               "+str3[1]+str3[2],FontChinese1));
		document.add(new Paragraph("                             "+str3[3]+"               "+str3[4]+str3[5]+str3[6]+str3[7],FontChinese1));
		document.add(new Paragraph("                             "+str3[8]+"               "+str3[9]+str3[10]+str3[11]+"                                                                                                                                                                              "+ply.getFLOOR()+"                            "+str4,FontChinese1));
		document.add(new Paragraph("                             "+"                                                     "+ply.getSTRUYEAR()+str3[12]+str3[13],FontChinese1));
		document.add(new Paragraph(0,"                                                                                                       "+ply.getCONSTMARK(),FontChinese1));
		document.add(new Paragraph("                             "+"                                                               "+CatZero(ply.getAREASIZE()),FontChinese1));
		// 建築物
		document.add(new Paragraph(" "));
		document.add(new Paragraph(" "));
		document.add(new Paragraph(" "));
		document.add(new Paragraph(" "));
		document.add(new Paragraph(8," "));
		// 火險保費及金額
		document.add(new Paragraph(0,"        　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　"+function.CatZero(ply.getINSDAMT().substring(0,5)),FontChinese));
		// 火險費率
		document.add(new Paragraph(0,"        　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　"+ply.getRATE().substring(1),FontChinese));
		// 火險保費
		document.add(new Paragraph(0,"        　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　"+function.CatZero(ply.getFIREPREM()),FontChinese));
		// 竊盜
		document.add(new Paragraph(62,"        　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　2.006",FontChinese));
		document.add(new Paragraph(0,"        　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　"+function.CatZero(1003),FontChinese));
		// 基本震保額
		document.add(new Paragraph(" "));
		document.add(new Paragraph(23,"        　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　"+function.CatZero(ply.getEAMT().substring(0,5)),FontChinese));
		// 基本地震費率
		document.add(new Paragraph(0,"        　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　0.9",FontChinese));
		// 基本地震保費
		document.add(new Paragraph(0,"        　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　"+function.CatZero(ply.getEPREM()),FontChinese));
		// 訪客及第三人
		document.add(new Paragraph(28,"        　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　100/1000",FontChinese));
		document.add(new Paragraph(12,"        　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　100",FontChinese));
		document.add(new Paragraph(0,"        　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　0.005",FontChinese));
		document.add(new Paragraph(0,"        　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　102",FontChinese));
		document.add(new Paragraph(12,"        　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　"+function.CatZero(2000),FontChinese));
		// 自動續保
		document.add(new Paragraph(" "));
		// 貸款戶別
		document.add(new Paragraph(" "));
		// 抵押權人
		document.add(new Paragraph(" "));
		document.add(new Paragraph(" "));
		document.add(new Paragraph(22,"                                   "+ply.getMTG()+"                                   "+ply.getAGENTUNIT(),FontChinese));
		// 行員代號
		document.add(new Paragraph(12,"                                                                                  "+ply.getAGENTEMPNO(),FontChinese));
		// 貸款編號
		document.add(new Paragraph(0,"                                                                                                                         "+ply.getBANKKEY(),FontChinese));
		// 附註
		document.add(new Paragraph(14,"                           自101年1月1日起，住宅地震基本保險最高賠償責任調整為新台幣150萬元。",FontChinese));
		document.add(new Paragraph(" "));
		document.add(new Paragraph(" "));
		document.add(new Paragraph(" "));
		document.add(new Paragraph(" "));
		document.add(new Paragraph(32,"            "+ply.getAGENT().trim()+"               "+ply.getAGENTUNIT().trim()+"                   "+ply.getBROKER()+"                   "+ply.getEMPA()+"                   "+ply.getEMPA1()+"                      "+ply.getSTUNIT()+"                       "+ply.getSEMP1().trim(),FontChinese));
		document.add(new Paragraph(12,"16.9% + 6%",FontChinese));
		document.newPage();
		// save first pdf
		Unit_Old = Unit_new;
	      }
	      else
	      {
		// close doucment
		document.close();
		path = "C:\\"+Unit_new+"-屋主要保書"+new ChangeCode().Gettimer()+".pdf";
		document = new Document(PageSize.A4,52,36,125,0);
		PdfWriter.getInstance(document,new FileOutputStream(path));
		// font
		document.addTitle("Mingtai");
		document.addAuthor("MINGTAI");
		document.addSubject("MINGTAI");
		document.addKeywords("MINGTAI");
		document.addCreator("MINGTAI");
		document.open();
		document.add(jpeg);
		commit = commit+1;
		// write pdf
		document.add(new Paragraph(16,"                                                                                                "+ply.getNEWPLY(),FontChinese));
		// 要保人
		document.add(new Paragraph(15,"                            "+ply.getFASRCNAME()+"                                                                                         "+ply.getAREANO()+ply.getADDR().substring(0,15),FontChinese2));
		document.add(new Paragraph(0,"                                                                                                       "+CatZero(ply.getFBIRTH().substring(0,3))+"       "+CatZero(ply.getFBIRTH().substring(3,5))+"        "+CatZero(ply.getFBIRTH().substring(5,7)),FontChinese));
		document.add(new Paragraph(7,"                                                                                                                                                                                "+ply.getADDR().substring(15),FontChinese2));
		document.add(new Paragraph(12,"                                                     "+ply.getFASRIDNO()+"                   "+ply.getTEL(),FontChinese));
		if(ply.getFSEX().equals("1"))
		{
		    document.add(new Paragraph(0,"V",FontChinese));
		}
		else if(ply.getFSEX().equals("2"))
		{
		    document.add(new Paragraph(0,"           V",FontChinese));
		}
		// 被保人
		document.add(new Paragraph(13,"                            "+ply.getINSDNAME()+"                                                                                          "+ply.getAREANO()+ply.getADDR().substring(0,15),FontChinese2));
		document.add(new Paragraph(0,"                                                                                                       "+CatZero(ply.getBIRTH().substring(0,3))+"       "+CatZero(ply.getBIRTH().substring(3,5))+"        "+CatZero(ply.getBIRTH().substring(5,7)),FontChinese));
		document.add(new Paragraph(7,"                                                                                                                                                                                "+ply.getADDR().substring(15),FontChinese2));
		document.add(new Paragraph(12,"                                                     "+ply.getIDNO()+"                   "+ply.getTEL(),FontChinese));
		if(ply.getSEX().equals("1"))
		{
		    document.add(new Paragraph(0,"V",FontChinese));
		}
		else if(ply.getSEX().equals("2"))
		{
		    document.add(new Paragraph(0,"           V",FontChinese));
		}
		// 保險期間
		num2 = 2+Integer.parseInt(ply.getEXPDAY().substring(0,3));
		num3 = 1+Integer.parseInt(ply.getEXPDAY().substring(0,3));
		document.add(new Paragraph(14,"                           12                             "+num3+"       "+ply.getEXPDAY().substring(3,5)+"         "+ply.getEXPDAY().substring(5)+"                                              "+num2+"       "+ply.getEXPDAY().substring(3,5)+"          "+ply.getEXPDAY().substring(5),FontChinese));
		// 標的物地址
		document.add(new Paragraph(28,"                        "+ply.getLOCATION().trim()+"     "+ply.getAREA(),FontChinese));
		// 建築
		// document.add(new Paragraph(" "));
		// System.out.println(row[17]);
		for(int i = 0; i<=13; i++)
		{
		    str3[i] = "  ";
		}
		try
		{
		    num1 = Integer.parseInt(ply.getCONSTCLASS());
		}
		catch (NumberFormatException e2)
		{
		    num1 = 0;
		}
		if(num1==1)
		    str4 = "A1";
		else if(num1==2)
		    str4 = "A2";
		else if(num1==3)
		    str4 = "B";
		else if(num1==4)
		    str4 = "C";
		document.add(new Paragraph("                             "+str3[0]+"               "+str3[1]+str3[2],FontChinese1));
		document.add(new Paragraph("                             "+str3[3]+"               "+str3[4]+str3[5]+str3[6]+str3[7],FontChinese1));
		document.add(new Paragraph("                             "+str3[8]+"               "+str3[9]+str3[10]+str3[11]+"                                                                                                                                                                              "+ply.getFLOOR()+"                            "+str4,FontChinese1));
		document.add(new Paragraph("                             "+"                                                     "+ply.getSTRUYEAR()+str3[12]+str3[13],FontChinese1));
		document.add(new Paragraph(0,"                                                                                                       "+ply.getCONSTMARK(),FontChinese1));
		document.add(new Paragraph("                             "+"                                                               "+CatZero(ply.getAREASIZE()),FontChinese1));
		// 建築物
		document.add(new Paragraph(" "));
		document.add(new Paragraph(" "));
		document.add(new Paragraph(" "));
		document.add(new Paragraph(" "));
		document.add(new Paragraph(8," "));
		// 火險保費及金額
		document.add(new Paragraph(0,"        　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　"+function.CatZero(ply.getINSDAMT().substring(0,5)),FontChinese));
		// 火險費率
		document.add(new Paragraph(0,"        　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　"+ply.getRATE().substring(1),FontChinese));
		// 火險保費
		document.add(new Paragraph(0,"        　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　"+function.CatZero(ply.getFIREPREM()),FontChinese));
		// 竊盜
		document.add(new Paragraph(62,"        　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　2.006",FontChinese));
		document.add(new Paragraph(0,"        　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　"+function.CatZero(1003),FontChinese));
		// 基本震保額
		document.add(new Paragraph(" "));
		document.add(new Paragraph(23,"        　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　"+function.CatZero(ply.getEAMT().substring(0,5)),FontChinese));
		// 基本地震費率
		document.add(new Paragraph(0,"        　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　0.9",FontChinese));
		// 基本地震保費
		document.add(new Paragraph(0,"        　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　"+function.CatZero(ply.getEPREM()),FontChinese));
		// 訪客及第三人
		document.add(new Paragraph(28,"        　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　100/1000",FontChinese));
		document.add(new Paragraph(12,"        　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　100",FontChinese));
		document.add(new Paragraph(0,"        　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　0.005",FontChinese));
		document.add(new Paragraph(0,"        　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　102",FontChinese));
		document.add(new Paragraph(12,"        　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　"+function.CatZero(2000),FontChinese));
		// 自動續保
		document.add(new Paragraph(" "));
		// 貸款戶別
		document.add(new Paragraph(" "));
		// 抵押權人
		document.add(new Paragraph(" "));
		document.add(new Paragraph(" "));
		document.add(new Paragraph(22,"                                   "+ply.getMTG()+"                                   "+ply.getAGENTUNIT(),FontChinese));
		// 行員代號
		document.add(new Paragraph(12,"                                                                                  "+ply.getAGENTEMPNO(),FontChinese));
		// 貸款編號
		document.add(new Paragraph(0,"                                                                                                                         "+ply.getBANKKEY(),FontChinese));
		// 附註
		document.add(new Paragraph(14,"                           自101年1月1日起，住宅地震基本保險最高賠償責任調整為新台幣150萬元。",FontChinese));
		document.add(new Paragraph(" "));
		document.add(new Paragraph(" "));
		document.add(new Paragraph(" "));
		document.add(new Paragraph(" "));
		document.add(new Paragraph(32,"            "+ply.getAGENT().trim()+"               "+ply.getAGENTUNIT().trim()+"                   "+ply.getBROKER()+"                   "+ply.getEMPA()+"                   "+ply.getEMPA1()+"                      "+ply.getSTUNIT()+"                       "+ply.getSEMP1().trim(),FontChinese));
		document.add(new Paragraph(12,"16.9% + 6%",FontChinese));
		document.newPage();
		// save first unit
		Unit_Old = Unit_new;
	      }
	      byteRead = byteRead+1;
	      currentValue = (int) ( byteRead*100/totalBytes );
	      progressBar.setValue(currentValue);
	  }

	  System.gc();
	  JOptionPane.showMessageDialog(null,"產生完成");
	  dispose();
	  document.close();
        }
        catch (Exception e1)
        {
	  System.out.println("錯了"+e1.toString());
	  document.close();
	  System.gc();
	  deleteFile(path);
	  ErrorMessage(e1);
	  dispose();
        }
        finally
        {
	  document.close();
	  System.gc();
	  dispose();
        }
    }

    public void run()
    {
        CreatePolicy();
    }

}
